/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2006
* Sleepycat Software. All rights reserved.
*
* $Id: CmdUtil.java,v 1.1 2006/05/06 09:00:28 ckaestne Exp $
*/
package com.sleepycat.je.utilint;
import java.io.File;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.config.EnvironmentParams;
import com.sleepycat.je.dbi.EnvironmentImpl;
/**
* Convenience methods for command line utilities.
*/
public class CmdUtil {
public static String getArg(String [] argv, int whichArg)
throws IllegalArgumentException {
if (whichArg < argv.length) {
return argv[whichArg];
} else {
throw new IllegalArgumentException();
}
}
/**
* Parse a string into a long. If the string starts with 0x, this is a hex
* number, else it's decimal.
*/
public static long readLongNumber(String longVal) {
if (longVal.startsWith("0x")) {
return Long.parseLong(longVal.substring(2), 16);
} else {
return Long.parseLong(longVal);
}
}
private static final String printableChars =
"!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
public static void formatEntry(StringBuffer sb,
byte[] entryData,
boolean formatUsingPrintable) {
for (int i = 0; i < entryData.length; i++) {
int b = entryData[i] & 0xff;
if (formatUsingPrintable) {
if (isPrint(b)) {
if (b == 0134) { /* backslash */
sb.append('\\');
}
sb.append(printableChars.charAt(b - 33));
} else {
sb.append('\\');
String hex = Integer.toHexString(b);
if (b < 16) {
sb.append('0');
}
sb.append(hex);
}
} else {
String hex = Integer.toHexString(b);
if (b < 16) {
sb.append('0');
}
sb.append(hex);
}
}
}
private static boolean isPrint(int b) {
return (b < 0177) && (040 < b);
}
/**
* Create an environment suitable for utilities. Utilities should in
* general send trace output to the console and not to the db log.
*/
public static EnvironmentImpl makeUtilityEnvironment(File envHome,
boolean readOnly)
throws DatabaseException {
EnvironmentConfig config = new EnvironmentConfig();
config.setReadOnly(readOnly);
/* Don't debug log to the database log. */
config.setConfigParam(EnvironmentParams.JE_LOGGING_DBLOG.getName(),
"false");
/* Do debug log to the console. */
config.setConfigParam(EnvironmentParams.JE_LOGGING_CONSOLE.getName(),
"true");
/* Set logging level to only show errors. */
config.setConfigParam(EnvironmentParams.JE_LOGGING_LEVEL.getName(),
"SEVERE");
/* Don't run recovery. */
config.setConfigParam(EnvironmentParams.ENV_RECOVERY.getName(),
"false");
EnvironmentImpl envImpl = new EnvironmentImpl(envHome, config);
return envImpl;
}
/**
* Returns a description of the java command for running a utility, without
* arguments. For utilities the last name of the class name can be
* specified when "-jar je.jar" is used.
*/
public static String getJavaCommand(Class cls) {
String clsName = cls.getName();
String lastName = clsName.substring(clsName.lastIndexOf('.') + 1);
return "java { " + cls.getName() + " | -jar je.jar " + lastName + " }";
}
}